Skip to content

Arcanea Story Progression — Season One build plan under Starlight governance#75

Draft
frankxai wants to merge 9 commits into
mainfrom
claude/arcanea-story-progression-15x460
Draft

Arcanea Story Progression — Season One build plan under Starlight governance#75
frankxai wants to merge 9 commits into
mainfrom
claude/arcanea-story-progression-15x460

Conversation

@frankxai

Copy link
Copy Markdown
Owner

What this is

A build-ready, CLI-executable plan that progresses Arcanea's first staged arc — The Founding ("Seven Impossible People", STORY_ENGINE.md Arc 1) — from synopsis into a shippable Season One: written episodes, canonical world-state deltas, and a franchise-grade visual key-art set. Written so a headless Codex / Grok CLI agent can pick up the backlog and execute it, gating its own output against an explicit quality bar.

Lives in docs/story-progression/ (per repo rule: no working .md in root).

The governance you asked for

  • Starlight Intelligence Operator — the single accountable builder; does the work, stages it, self-scores.
  • The Starlight Queen — enforces canon integrity + meaningful progression + the Board gate. Verdicts: SHIP / REVISE / REJECT.
  • The Board of Five — five veto-lenses, each scored 0–5 with a hard floor of 4 (no averaging, any veto blocks):
    • 🍎 Steve Jobs — taste & simplicity (cut anything non-essential)
    • 🚀 Elon Musk — first principles & 10x ambition (obey Arcanea's physics)
    • Buddha — essence & restraint (no slop, no AI-tells)
    • 🎸 Rock Star — coolness & edge (beige = reject)
    • 💎 K-Pop — confidence & precision polish (the set reads as one body)

The four documents

File Purpose
README.md Mission control + run loop
STARLIGHT_GOVERNANCE.md Operator role, Queen loop, the 5-lens rubric
WORLD_PROGRESSION_EPOCH.md Season One: 8-episode map + world-state deltas D1–D6 (State A → State B)
VISUAL_PLAN.md 10-asset key-art set, prompts + pipeline, locked to VISUAL_DOCTRINE.md
EXECUTION_BACKLOG.md Ordered tasks T-00→T-16 with file paths, acceptance criteria, [GATE] Board sign-offs

Safety rails

  • CANON_LOCKED.md is never touched. Every output is additive and Status: STAGING.
  • The plan ends with a Promotion Request for the Creator — agents propose, Frank promotes. No self-promotion to canon.
  • "Meaningful progression" is enforced as a test: if an episode can be cut without changing what's true about the world (D1–D6), the Queen rejects it.

Draft — open for review before any episodes/art are generated against the backlog.

🤖 Generated with Claude Code


Generated by Claude Code

…rlight governance

Executable, CLI-ready plan that progresses Arc 1 (The Founding) from staged
synopsis into a buildable Season One: 8-episode map, canonical world-state
deltas (D1-D6), and a 10-asset visual key-art set locked to VISUAL_DOCTRINE.

Governance: Starlight Intelligence Operator builds; the Starlight Queen
enforces; a Board of five veto-lenses (Jobs/Musk/Buddha/Rock Star/K-pop)
gates every artifact at >=4 of 5. Codex/Grok CLI execute the backlog.

All progression is additive and STAGING-only; CANON_LOCKED.md is untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC
@vercel

vercel Bot commented Jun 21, 2026

Copy link
Copy Markdown

Deployment failed with the following error:

Invalid vercel.json file provided

@vercel

vercel Bot commented Jun 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
arcanea-2 Error Error Jun 21, 2026 11:49pm
arcanea-web Ready Ready Preview, Comment, Open in v0 Jun 21, 2026 11:49pm

@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 39c366dd-5e71-47aa-9807-46bd636aff03

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/arcanea-story-progression-15x460

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request establishes a comprehensive story progression build plan for Season One of Arcanea, introducing a structured framework for autonomous CLI execution. It includes a governance model, a world progression epoch mapping out eight episodes, a visual plan for a ten-asset key art set, and an execution backlog. The feedback identifies minor path inconsistencies that could affect the headless CLI executor and points out a naming discrepancy where the Godbeast name should be corrected from 'Vaerith' to 'Vaelith' to maintain exact continuity with canonical documents.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.


> Each episode: ≈2,000–3,500 words, prose, cites its canon hooks, ends with the score line. Must move world-state.

- [ ] **T-01** Write **E01 "Wrong Place, Wrong Hour"** → `staging/season-one/E01.md`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The staging path specified here (staging/season-one/E01.md) is inconsistent with the staging root defined in the conventions (.arcanea/lore/staging/season-one/). For a headless CLI executor to run reliably, paths should be fully qualified and consistent.

Suggested change
- [ ] **T-01** Write **E01 "Wrong Place, Wrong Hour"**`staging/season-one/E01.md`.
- [ ] **T-01** Write **E01 "Wrong Place, Wrong Hour"**.arcanea/lore/staging/season-one/E01.md.

Comment on lines +69 to +71
- [ ] **T-16** Write `staging/season-one/PROMOTION_REQUEST.md` — a one-page Creator brief: what's staged, the D1–D6
deltas proposed for canon, the Board verdicts, and the explicit ask: *promote to canon?*
**Accept:** Creator can approve/reject from this one page. **No self-promotion to canon — Frank decides.**

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The path staging/season-one/PROMOTION_REQUEST.md is missing the .arcanea/lore/ prefix defined in the conventions. Correcting this ensures the CLI agent writes to the correct directory.

Suggested change
- [ ] **T-16** Write `staging/season-one/PROMOTION_REQUEST.md` — a one-page Creator brief: what's staged, the D1–D6
deltas proposed for canon, the Board verdicts, and the explicit ask: *promote to canon?*
**Accept:** Creator can approve/reject from this one page. **No self-promotion to canon — Frank decides.**
- [ ] **T-16** Write .arcanea/lore/staging/season-one/PROMOTION_REQUEST.md — a one-page Creator brief: what's staged, the D1–D6
deltas proposed for canon, the Board verdicts, and the explicit ask: *promote to canon?*
**Accept:** Creator can approve/reject from this one page. **No self-promotion to canon — Frank decides.**


## Continuity guardrails (K-Pop lens — zero ragged edges)

- **Names are exact.** Kaelindra Voss, Ryn, Velindris, Solenne Ashmark, Taura Skein + Vaerith, Caelum, Mireth.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The Godbeast name is written as Vaerith, but according to the canonical truths in CANON_LOCKED.md, the correct name is Vaelith (or Thessara depending on the active gate/frequency mapping). Please correct this to maintain exact continuity.

Suggested change
- **Names are exact.** Kaelindra Voss, Ryn, Velindris, Solenne Ashmark, Taura Skein + Vaerith, Caelum, Mireth.
- **Names are exact.** Kaelindra Voss, Ryn, Velindris, Solenne Ashmark, Taura Skein + Vaelith, Caelum, Mireth.

| V2 | Character plate — **Kaelindra Voss** (tactician, Academy-trained). | Hero card. | Noble angularity; star-sigil; military grace. |
| V3 | Character plate — **Ryn** (Gate-Touched, mid-cascade energy). | Hero card. | Cascade light behavior; chaotic-consciousness silhouette. |
| V4 | Character plate — **Solenne Ashmark** (Ironhold Stance, immovable). | Hero card. | Living-stone material; protective posture. |
| V5 | Character plate — **Taura Skein + Vaerith** (the living bond). | Hero card. | Bonded pair composition; sacred-beast anchor. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The Godbeast name Vaerith should be corrected to Vaelith to align with the canonical names defined in CANON_LOCKED.md.

Suggested change
| V5 | Character plate — **Taura Skein + Vaerith** (the living bond). | Hero card. | Bonded pair composition; sacred-beast anchor. |
| V5 | Character plate — **Taura Skein + Vaelith** (the living bond). | Hero card. | Bonded pair composition; sacred-beast anchor. |

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR Review — Season One Story Progression Plan

This is a well-structured documentation PR that sets up an autonomous build pipeline for Arcanea's first story arc. The governance model is thoughtful and the canon-safety rails are correctly placed. Here's my breakdown:


✅ Strengths

Governance architecture

  • The Operator → Queen → Board of Five chain-of-command is clear and non-circular. The hard veto rule (any lens < 4 blocks; no averaging) is exactly the right call for quality enforcement.
  • CANON_LOCKED.md is correctly treated as read-only throughout. The explicit "agents propose, Frank promotes" rule in EXECUTION_BACKLOG.md (T-16) removes any ambiguity about who holds promotion authority.

Document cross-referencing

  • All source files cited in WORLD_PROGRESSION_EPOCH.md (FLAGSHIP_TEAM.md, STARLIGHT_CORPS_CODEX.md, VOID_ASCENDANTS.md, GATE_TOUCHED_UNDERGROUND.md, VISUAL_DOCTRINE.md, STORY_ENGINE.md) exist in .arcanea/lore/ — confirmed. A future executor agent won't hit 404s on its source material.

Task design

  • Each task in EXECUTION_BACKLOG.md has a concrete, testable acceptance criterion. The two [GATE] tasks (T-09, T-14) are placed correctly — after the full deliverable set is complete, not per-artifact.
  • The Definition of Done is explicit and reversible: nothing lands in canon without Creator sign-off.

File placement

  • Correctly placed under docs/story-progression/ per CLAUDE.md conventions. Root folder is clean.

⚠️ Issues to Address

1. Missing script: nb-generate.mjs (medium)
VISUAL_PLAN.md pipeline step 1 references two scripts:

node generate-arcanea-img.mjs ...   # ✅ exists at repo root
node nb-generate.mjs ...            # ❌ not found anywhere in the repo

A headless agent following this pipeline will fail at the second reference. Either remove nb-generate.mjs from the pipeline comment, or add a note that it's a future artifact. The pipeline block should only reference tools that exist.

2. Higgsfield MCP is not a loaded MCP server (medium)
VISUAL_PLAN.md step 2 says:

Route through mcp__Higgsfield__generate_image with the V1 prompt

This MCP server is not available in the current session toolset and is not listed in .claude/CLAUDE.md's available MCP servers. An executor agent that takes this instruction literally will error out. Recommend either:

  • Noting it as "install separately" with a setup step, or
  • Routing to the available Gemini image generation pathway only for now.

3. Document count inconsistency in README (minor)
README.md says "The four documents" but the table inside that section lists 4 items while the PR adds 5 files (README itself + 4 supporting docs). Technically the README isn't listing itself, so the count is correct — but the phrasing will confuse an executor who counts the files it downloaded. Consider rephrasing to: "The four supporting documents (plus this README as Mission Control)".

4. Missing FLAGSHIP_TEAM_V2.md decision (minor)
The lore directory contains both FLAGSHIP_TEAM.md and FLAGSHIP_TEAM_V2.md. WORLD_PROGRESSION_EPOCH.md cites FLAGSHIP_TEAM.md as the source. If V2 supersedes V1, executor agents should be pointed at V2 to avoid working from outdated character specs. Worth clarifying which version is authoritative.


💡 Suggestions (non-blocking)

Add a one-liner canon check to T-00
T-00 creates directories and seeds the ledger. Consider adding a read-only sanity check: confirm that the frequencies, character names, and D1–D6 episode hooks in WORLD_PROGRESSION_EPOCH.md match CANON_LOCKED.md before any writing begins. This prevents canon drift from surfacing only at T-09.

Score line placement
STARLIGHT_GOVERNANCE.md specifies the score line goes at the file footer. EXECUTION_BACKLOG.md says it goes inline (<!-- BOARD: ... -->). Both are correct in context, but the acceptance criteria for T-01–T-08 don't explicitly say "HTML comment at end of file." Making T-01's acceptance criterion the canonical example would remove ambiguity for subsequent episodes.

World-state ledger format
The D1–D6 table is defined in WORLD_PROGRESSION_EPOCH.md but the ledger file itself (WORLDSTATE_LEDGER.md) is left for T-00 to create. Consider adding a minimal template or column spec to the backlog so the executor produces a consistent schema from day one.


Security

No credentials, no hardcoded keys. GEMINI_API_KEY is referenced by name only as an env var — correct. No concerns.


Summary

The plan is solid and the canon-safety model is correct. The two medium issues (nb-generate.mjs and Higgsfield MCP) need fixing before this goes to an executor — both would cause hard failures mid-pipeline. The minor items are optional clean-ups. Once those are addressed, this is ready to hand off to Codex/Grok.

claude added 2 commits June 21, 2026 23:18
vercel.json on main contained unresolved conflict markers, making it invalid
JSON and failing all Vercel preview deploys repo-wide. Resolved to the turbo
monorepo build command (pnpm turbo run build --filter=@arcanea/web).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC
…oling refs

- Fully-qualify all CLI staging/spec paths (.arcanea/lore/staging/..., docs/.../visual-specs/...)
  so a headless executor running from repo root writes to the right place.
- VISUAL_PLAN: drop nonexistent nb-generate.mjs ref (only generate-arcanea-img.mjs exists);
  make Higgsfield MCP step conditional on it being connected, with native Gemini fallback.
- Cite FLAGSHIP_TEAM_V2.md as the authoritative team file (supersedes V1).
- Harden T-00 (canon sanity check + ledger column schema); clarify score-line placement in T-01.
- README: clarify file count.

Kept 'Vaerith' (Taura Skein's bonded storm-drake, per STORY_ENGINE.md / FLAGSHIP_TEAM_V2.md) —
distinct from the Godbeast 'Vaelith' (Elara, Starweave Gate). The reviewer suggestion to
rename would have conflated two canonical entities.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC

Copy link
Copy Markdown
Owner Author

Review pass — resolutions (commit 72c9492)

Thanks for the thorough reviews. Triaged and pushed:

Applied ✅

Declined — would introduce a canon error ❌

  • The suggestion to rename VaerithVaelith (gemini-code-assist, 3 comments). Verified against source: Vaerith is Taura Skein's field-bonded storm-drake — it appears ~12× in STORY_ENGINE.md and FLAGSHIP_TEAM_V2.md and is a distinct character. Vaelith is a different entity — the Godbeast of Elara (Starweave Gate, 852 Hz) in CANON_LOCKED.md. Renaming would conflate the two. Vaerith stays.

Also fixed (out of original PR scope, separate commit before this)

  • The root vercel.json on main had a committed, unresolved merge conflict (invalid JSON) that was failing all Vercel preview deploys. Resolved to the turbo monorepo build command per maintainer direction — previews are now building again.

Pre-existing CI, not from this PR

  • CLI Tests / Test Summary failures are pre-existing repo test debt (175/1868 failing on main, e.g. getGuardian) — unrelated to this docs-only change. Flagging, not fixing here.

Still a draft — staging-only, nothing promoted to canon. CodeRabbit skipped review (draft detected); will re-trigger when marked ready.


Generated by Claude Code

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR Review — Arcanea Story Progression #75

Summary

This PR does two distinct things: (1) adds five planning/documentation files for a Season One story-build workflow, and (2) resolves a pre-existing git merge conflict in vercel.json. Overall the work is thoughtfully structured and canon-aware. There are a few items to address before merge.


vercel.json — Merge Conflict Resolution ⚠️

This is the only real code change in the PR.

origin/main currently has unresolved git conflict markers in vercel.json (<<<<<<< HEAD, =======, >>>>>>>) — which means the file is unparseable as JSON and deployments from main are already broken. The PR correctly removes those markers.

Choices made in the resolution:

Setting Kept Dropped
buildCommand pnpm turbo run build --filter=@arcanea/web cd apps/web && pnpm run build
NODE_OPTIONS (removed) --max-old-space-size=4096

Concern: NODE_OPTIONS: --max-old-space-size=4096 was likely added specifically because the Next.js build was hitting Node's default heap limit (~1.5 GB). Removing it silently may cause OOM build failures on Vercel (where build containers have limited memory). Please confirm this was intentional — if the turbo-based build handles memory differently, a brief comment in the PR body would help.

The kept version (Turbo-based build) is the right call architecturally for a monorepo; just verify the memory headroom.


Documentation Files — docs/story-progression/

File placement: ✅ Correctly in docs/ per CLAUDE.md conventions. No files added to root.

Canon safety: ✅ Every document is marked Status: STAGING. CANON_LOCKED.md is flagged as read-only in every relevant instruction. The "agents propose, Frank promotes" rule is stated explicitly in multiple places — this is the right pattern.

Referenced source files: ✅ Verified all referenced lore files exist in .arcanea/lore/:

  • CANON_LOCKED.md, STORY_ENGINE.md, FLAGSHIP_TEAM_V2.md, STARLIGHT_CORPS_CODEX.md, VOID_ASCENDANTS.md, GATE_TOUCHED_UNDERGROUND.md, VISUAL_DOCTRINE.md, STARBOUND_CREWS.md — all present.

Structural quality: The governance model is well-designed. The Board of Five with no-averaging veto logic, the Queen enforcement loop, and the staged ledger with world-state deltas (D1–D6) are all clear and executable by an autonomous agent. The "no cosmetic deltas" rule (Musk lens + the meaningful-progression test) is a good quality gate.

Minor issues:

  1. STARLIGHT_GOVERNANCE.md ASCII diagram — the Board of Five box art has an off-by-one alignment issue on the │BUDDHA│ row (│essence│ is missing a leading ). Not functional, but polish matters if the K-Pop lens is the standard.

  2. VISUAL_PLAN.md pipeline comment is slightly ambiguous: "Higgsfield MCP, ONLY if it is connected" — the executor won't know how to check for MCP availability. Consider an explicit fallback line: "Check for mcp__Higgsfield__generate_image tool availability; if absent, proceed with native path."

  3. EXECUTION_BACKLOG.md T-09/T-14 gate record fields are blank by design, which is correct, but the table header row and the blank rows use different cell-count formatting. Minor formatting inconsistency.

  4. WORLD_PROGRESSION_EPOCH.md references character "Seravyn Duskmere" authorizing the team in E08. This name does not appear in FLAGSHIP_TEAM_V2.md or STARLIGHT_CORPS_CODEX.md at first glance — please verify this is an established canon character (Archon? Corps official?) and not a new name that needs to be introduced earlier or noted as staging.


CI Status

  • TypeScript / Security / No Split-Brain: ✅ Passing
  • CLI Tests (22) / Test Summary: ❌ Failing

The test failures appear pre-existing (not caused by this PR — all changes are documentation + a vercel.json fix). However, it's worth confirming the failing CLI tests are not related to the vercel.json change before merge.


Security

No secrets, credentials, or .env content in the added files. GEMINI_API_KEY is referenced as an environment variable name in a comment only — not hardcoded. ✅


Verdict

Approve with one blocking item:

  • Blocking: Confirm whether removing NODE_OPTIONS: --max-old-space-size=4096 is intentional and that Vercel builds have sufficient memory headroom without it. If removing was deliberate (e.g., Turbo handles it differently, or the old limit was set for the direct pnpm run build path), state it in the PR body so future reviewers understand the decision.

Non-blocking items above can be addressed in follow-up tasks within the backlog.

Good governance structure — the staging discipline and human-promotion gate are exactly right for AI-assisted canon expansion.

- Realign the chain-of-command ASCII diagram (uniform box widths) — honors the
  K-Pop precision lens the doc itself sets as the standard.
- E08: cite STARBOUND_CREWS.md as the source for Seravyn Duskmere (Archon, Crew
  Solara) — she is established canon there, not a new name.
- VISUAL_PLAN: make the Higgsfield availability check explicit (test for the
  mcp__Higgsfield__generate_image tool; native Gemini fallback otherwise).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC

Copy link
Copy Markdown
Owner Author

Review response (commit e3d3c93)

Thanks — careful review. Verified each item:

Blocking item — NODE_OPTIONS removal: resolved, keeping as-is.

  • It was the maintainer's explicit choice to take the turbo side (which doesn't carry --max-old-space-size=4096).
  • More importantly, it's empirically confirmed: arcanea-web deployed READY on Vercel from this exact resolution (commit 72c9492) — the turbo build (--filter=@arcanea/web) completed without the heap flag, so there's headroom without it. Re-adding speculative config that the green build doesn't need would be the wrong call. If a future OOM appears, the flag can be reintroduced in a focused infra change.

Seravyn Duskmere — confirmed canon (not a new name). She's defined in .arcanea/lore/STARBOUND_CREWS.md (Archon, Crew Solara). You checked FLAGSHIP_TEAM_V2.md / STARLIGHT_CORPS_CODEX.md, but she lives in STARBOUND_CREWS. I've added that file as the explicit E08 source so the executor can trace it.

Polish items — fixed:

  • ASCII chain-of-command diagram realigned to uniform box widths (the K-Pop precision lens the doc sets as its own standard).
  • VISUAL_PLAN.md Higgsfield step now has an explicit availability check: test for the mcp__Higgsfield__generate_image tool; native Gemini fallback if absent.

CI: confirmed the CLI Tests / Test Summary failures are pre-existing — identical 175/1868 fail count on this branch as on main, and my changes are docs + the vercel.json fix only (nothing touches the node test suite). Not introduced here.

Still a draft, staging-only — nothing promoted to canon.


Generated by Claude Code

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

Code Review — PR #75: Arcanea Story Progression

Summary: This PR adds 5 planning documents under docs/story-progression/ and simplifies vercel.json. The planning work is well-structured; the vercel.json change needs attention.


✅ What's done well

Planning documents (docs/story-progression/)

  • Correctly placed in /docs per CLAUDE.md file organization rules — no root-level .md files.
  • CANON_LOCKED.md is explicitly read-only throughout; all outputs land in Status: STAGING. The canon protection strategy is solid.
  • Acceptance criteria in EXECUTION_BACKLOG.md are specific and testable — not vague ("episode is good") but measurable ("zero canon mismatches", "self-score ≥4 all lenses", "score line on last line of file").
  • The Board of Five veto mechanism (no averaging, any lens below 4 blocks) is the right anti-drift design for autonomous CLI execution. A 5-5-5-5-2 rightly blocks.
  • T-00 running a canon sanity check before any writing begins is exactly the right sequencing — catching drift at setup rather than at T-09.
  • The WORLD_PROGRESSION_EPOCH.md enforces "meaningful progression" with a clear test: a reader of E01–E08 must be able to name what changed (D1–D6). Strong editorial discipline.

🔴 High Priority — vercel.json (112 lines removed)

This is the riskiest change in the PR. The previous PRs in this repo (#69, #71, #72) were specifically about stabilizing Vercel deployment health checks. This PR removes 112 lines from vercel.json with no explanation in the PR description.

Questions that need answers before merging:

  1. What was in those 112 lines? (Health check routes? Function configurations? Custom routing rules?)
  2. Were any of those lines addressing the repeated health-check failures in PRs fix(ci): stabilize Vercel deploy health checks, rollback automation, and SIS startup ping #69/Harden MVP production deploy gates and fix lint blocker behind repeated health-check incidents #71/[Updated] Phase 1 #1: Full SIS Wiring... #72?
  3. Has this been deployed to a preview/staging environment and verified?

Recommendation: Add a section to the PR description explaining the vercel.json simplification rationale. If this is intentional cleanup, document what was removed and why. If it was accidental, revert the vercel.json change to a separate PR.


🟡 Moderate — vercel.json issues

1. No-op rewrite (dead code)

{
  "source": "/api/:path*",
  "destination": "/api/:path*"
}

This rewrites /api/anything to /api/anything — itself. It does nothing and should be removed. Vercel Next.js apps route /api/* automatically.

2. Permissions-Policy on API routes but not general routes
The /api/(.*) source headers include Permissions-Policy: camera=(), microphone=(), geolocation=() but the /(.*)source does not. This is backwards — page routes (not API routes) are where camera/mic/geolocation permissions apply from the browser's perspective. Consider moving this header to the general /(.*)rule or adding it to both.

3. Missing Content-Security-Policy
The security headers include X-Frame-Options, X-XSS-Protection, and X-Content-Type-Options but no Content-Security-Policy. For a Next.js 16/React 19 app, a CSP header is a meaningful security layer, especially given the AI integrations (Gemini, Claude) and user-generated content context.


🟡 Moderate — Planning document gaps

4. VISUAL_DOCTRINE.md referenced but not in this PR
VISUAL_PLAN.md declares itself "Locked to .arcanea/lore/VISUAL_DOCTRINE.md (the aesthetic is law)". If VISUAL_DOCTRINE.md doesn't exist yet, agents executing T-10 through T-14 will have no doctrine to anchor to. Verify it exists; if not, it should be a prerequisite task or this PR should note the dependency.

5. generate-arcanea-img.mjs pipeline reference
VISUAL_PLAN.md references node generate-arcanea-img.mjs at the repo root. If this script doesn't exist, T-11 will silently fail when a CLI agent tries to run it. Worth confirming this exists before agents hit Phase 2.


🟢 Minor — Planning observations

6. EXECUTION_BACKLOG.md is missing a "current executor" field
The backlog says "take next unchecked task in order" but has no way to indicate who/what is currently working a task. For concurrent CLI agents this could cause double-execution. A simple [IN PROGRESS] marker convention would help.

7. Episode word-count range is wide
The ≈2,000–3,500 word range per episode is a 75% variance. The Buddha lens ("subtract until only truth remains") suggests tighter guidance would help agents avoid padding to hit an upper bound. Consider a softer cap like "target 2,200 words; never exceed 3,000 except where the scene demands it."


Test Coverage

No automated tests are applicable to this PR (planning documents only). The quality gate system built into the backlog (self-scores, Board vetoes, Queen enforcement) is the test harness here. It's well-designed for the artifact type.


Verdict: The planning work is franchise-grade and ready. The vercel.json change needs justification before merge — either an explanation of what was removed and why, or a revert to keep this PR scoped to the story progression plan.

…y marker

- Episodes: target ~2,500 words, hard ceiling 3,000 (Buddha lens — subtract padding)
  instead of the wide 2,000-3,500 range.
- Backlog: add [IN PROGRESS — <executor>] convention so concurrent CLI agents
  don't double-execute a task.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC

Copy link
Copy Markdown
Owner Author

Review response (commit d5c7672)

High-priority vercel.json concern — this is a diff misread, no functionality was removed.

The 112 deleted lines were a duplicate, conflicted second copy of the same config plus git conflict markers — not 112 lines of distinct functionality. main had:

<<<<<<< HEAD
{ ...full config A... }
=======
{ ...near-identical config B... }   ← these are the "112 lines"
>>>>>>> 17fcd1ab

The resolved file keeps one complete copy. Verified intact in the result: all CORS/security headers, both rewrites, the /home redirect, and the /health/api/health route (lines 92–93). So nothing from the #69/#71/#72 health-check work is gone — the only semantic deltas between the two conflict sides were buildCommand (→ turbo) and NODE_OPTIONS (covered in my previous reply; arcanea-web deploys READY without it). No revert needed.

"Missing files" (items 4 & 5) — both exist, verified:

  • .arcanea/lore/VISUAL_DOCTRINE.md ✅ (12 KB)
  • generate-arcanea-img.mjs at repo root ✅ (1.5 KB)

So T-10–T-14 have their doctrine anchor and T-11 has its generator.

Applied (items 6 & 7):

  • Added a [IN PROGRESS — <executor>] backlog convention so concurrent CLI agents don't double-execute a task.
  • Tightened episode length to target ~2,500 words, hard ceiling 3,000 (Buddha lens — subtract padding) instead of the wide 2,000–3,500 range.

Declined — pre-existing + out of scope (items 1–3):

  • The no-op /api/:path* rewrite, the Permissions-Policy placement, and the absent Content-Security-Policy all pre-date this PR (present on main, in both sides of the conflict). They're reasonable hardening, but changing routing/security-header semantics doesn't belong in a story-progression docs PR + conflict fix. Worth a dedicated infra PR if you want them.

Still a draft, staging-only.


Generated by Claude Code

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

Code Review — PR #75: Arcanea Story Progression (Season One)

This PR has two distinct parts: the story-progression documentation (five new files) and the vercel.json conflict resolution.


Critical — vercel.json security regression

The merge conflict resolution chose the branch variant and silently dropped the HEAD's entire security headers block.

CORS (API routes) — gone:

  • Access-Control-Allow-Origin: https://arcanea.ai
  • Access-Control-Allow-Credentials: true
  • Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS,PATCH

Without these, CORS behavior on /api/* falls back to Next.js defaults — a regression that could expose the API to cross-origin requests from any domain.

Security headers (all routes) — gone:

  • X-Content-Type-Options: nosniff — MIME-sniff protection
  • X-Frame-Options: SAMEORIGIN / DENY — iframe embedding protection
  • X-XSS-Protection: 1; mode=block — legacy XSS filter
  • Referrer-Policy: strict-origin-when-cross-origin — referrer leakage protection
  • Strict-Transport-Security: max-age=31536000; includeSubDomains — HSTS
  • Permissions-Policy: camera=(), microphone=(), geolocation=() — API permission restrictions

Recommendation: Before merging, restore the full headers, rewrites, and redirects blocks from HEAD. The build command change and removal of the duplicate NODE_ENV are the only legitimate changes needed from this branch.


Moderate — NODE_OPTIONS removed

- "NODE_OPTIONS": "--max-old-space-size=4096"

Removing the 4GB heap allocation could cause OOM errors during Next.js production builds. If this flag was added to fix prior build failures, removing it will likely re-introduce them. Keep it unless there is a confirmed reason the default heap is sufficient.


Moderate — Removed rewrites and redirects

Dropped silently in the conflict resolution:

  • { source: "/api/:path*", destination: "/api/:path*" } — passthrough rewrite
  • { source: "/health", destination: "/api/health" } — health check endpoint alias
  • { source: "/home", destination: "/" } — marketing redirect

The /health alias is directly related to the CI/CD stabilization work in PRs 69–72. Verify this is safe to remove before merging.


What is correct in vercel.json

Change Assessment
"cd apps/web && pnpm run build" to "pnpm turbo run build --filter=@arcanea/web" Correct for a turborepo monorepo; enables build caching
Duplicate NODE_ENV line removed Fine

Story Progression Documentation

The five files in docs/story-progression/ are well-structured and follow project conventions: correct directory, additive/staging only, CANON_LOCKED.md never touched.

Strengths:

  • Canon-safety guardrail ("agents propose; Frank promotes") is clearly stated and enforced throughout.
  • Concurrency guard in EXECUTION_BACKLOG.md ([IN PROGRESS — <executor>] locking) is a practical safeguard against double-execution with multiple CLI agents.
  • World-state deltas D1–D6 are well-motivated and traceable to specific source documents.
  • The Board gate system (any single lens < 4 blocks shipping) is a meaningful quality bar, not rubber-stamping.

Minor issues:

  • WORLD_PROGRESSION_EPOCH.md references FLAGSHIP_TEAM_V2.md, STARLIGHT_CORPS_CODEX.md, VOID_ASCENDANTS.md, GATE_TOUCHED_UNDERGROUND.md, and VISUAL_DOCTRINE.md — none are in this PR. Verify they exist in .arcanea/lore/ before executing T-01; T-00's canon sanity check should surface missing files early.
  • VISUAL_PLAN.md assumes generate-arcanea-img.mjs exists at root and GEMINI_API_KEY is set. T-10 will fail silently if either is absent — consider adding an explicit pre-flight check to T-00.
  • README.md hardcodes the branch name (claude/arcanea-story-progression-15x460), which becomes stale after merge. Replace with a static label or remove it.

Summary

Area Status
Security headers in vercel.json Must fix before merge
NODE_OPTIONS removal Confirm intentional
Health check rewrite removal Verify no CI/monitoring impact
Story-progression documentation Good shape, minor nits
Canon safety (no LOCKED edits) Pass
File organization (correct dirs) Pass

The documentation work is solid. The vercel.json merge resolution needs to be revisited — the security headers, rewrites, and redirects from HEAD should be preserved and combined with the turborepo build command from this branch.

…flight

- README: replace the hardcoded branch name with a stable reference (avoids
  going stale after merge).
- T-00: add a pre-flight that confirms source lore files + generate-arcanea-img.mjs
  + GEMINI_API_KEY exist before Phase 2, so T-10/T-11 fail loudly at setup, not silently.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC

Copy link
Copy Markdown
Owner Author

Review response (commit 6425bf4)

"Critical security regression" — this is incorrect; nothing was dropped. I verified the resolved vercel.json on this branch directly (106 lines) — every header the review lists as "gone" is present:

Claimed dropped Actually present at
Access-Control-Allow-Origin / -Credentials / -Methods lines 26 / 22 / 30
X-Content-Type-Options lines 38, 63
X-Frame-Options lines 42, 67
X-XSS-Protection lines 46, 71
Referrer-Policy lines 50, 75
Strict-Transport-Security (HSTS) line 79
Permissions-Policy line 54
/api/:path* rewrite line 88
/health/api/health line 92
/home redirect line 99

The confusion is a diff misread (this is the second review to hit it): main had the file committed with conflict markers wrapping two near-identical copies. The diff shows the duplicate copy's headers as - deletions, which looks like "headers removed" — but the retained first copy keeps all of them. Net of the resolution is exactly two changes: buildCommand → turbo and the NODE_OPTIONS line (covered earlier; arcanea-web deploys READY without it). /health is intact, so the #69–72 stabilization work is unaffected. No restore needed.

You can confirm on the branch: grep -nE "Strict-Transport-Security|/health|Access-Control-Allow-Origin" vercel.json.

Source files (minor #1): all exist in .arcanea/lore/FLAGSHIP_TEAM_V2.md, STARLIGHT_CORPS_CODEX.md, VOID_ASCENDANTS.md, GATE_TOUCHED_UNDERGROUND.md, VISUAL_DOCTRINE.md ✓. And T-00's canon check would surface any missing one.

Applied:

Thanks for the careful read on the docs — the concurrency guard and Board-gate notes are appreciated. Still a draft, staging-only.


Generated by Claude Code

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR Review — #75 Arcanea Story Progression, Season One

This PR has two distinct parts that warrant separate treatment: a documentation suite for story-progression governance, and an incidental vercel.json change that quietly drops significant configuration. Addressing the config change is the blocker before merge.


🔴 Critical: vercel.json merge-conflict resolution drops security headers and routing

The conflict resolution chose the branch's HEAD side but silently discarded a block that the other side carried:

What was removed:

  • NODE_OPTIONS: "--max-old-space-size=4096" — presumably added to prevent OOM during Turbo builds on large monorepos. Removing it can reintroduce the very build failures this was meant to fix.
  • All security response headers — X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Referrer-Policy, Strict-Transport-Security, Permissions-Policy, and the full Access-Control header block for /api/* routes.
  • Rewrites/api/:path* and /health → /api/health
  • Redirects/home → /

This is a net regression in the production security posture. The headers that were dropped are standard defense-in-depth (clickjacking protection, HSTS, content-type sniffing prevention). Before merging, verify which side of the conflict was authoritative and restore the headers if they belong in main.

Suggestion: Check git log --oneline vercel.json to find when the headers were introduced and why. If they belong, restore them in a fixup commit before this PR merges.


✅ Documentation — Story Progression System

The governance framework is well-designed. Specific strengths:

Structural soundness

  • Files land in docs/story-progression/ — correct per CLAUDE.md (/docs for documentation). No root-level markdown files. ✓
  • CANON_LOCKED.md is treated as read-only throughout — every output lands in staging/ and waits on Creator promotion. The safety rail is consistent and explicit. ✓
  • All referenced source files exist in .arcanea/lore/: FLAGSHIP_TEAM_V2.md, STARLIGHT_CORPS_CODEX.md, VOID_ASCENDANTS.md, GATE_TOUCHED_UNDERGROUND.md, VISUAL_DOCTRINE.md. ✓
  • generate-arcanea-img.mjs exists at repo root. Pre-flight in T-00 will pass. ✓

Governance design

  • The "meaningful progression test" is excellent — if an episode can be cut without changing D1–D6, the Queen rejects it — this prevents filler episodes that produce no world-state change.
  • The concurrency model (mark [IN PROGRESS — <executor>] before starting, prevents double-execution) is correctly thought through for parallel CLI agents.
  • The Board of Five "no averaging, any veto blocks" rule is a strong quality floor. An averaging mechanism would let one weak lens hide behind four strong ones.

Minor suggestions

  1. T-00 canon sanity check is manual — there's no script to automate the Gate-frequency / character-name cross-check against CANON_LOCKED.md. A small validation script (even a grep over known canonical values) would make this repeatable and CI-friendly rather than "the agent reads and reports."

  2. VISUAL_PLAN.md pipeline references a Higgsfield MCP tool (mcp__Higgsfield__generate_image) that may not be available in all executor sessions. The "if absent: stay on native pathway" fallback is documented correctly, but adding that tool to the pre-flight check in T-00 (alongside GEMINI_API_KEY) would prevent silent pipeline degradation mid-run.

  3. Episode word-count ceiling is per-file, not enforced by tooling — the 3,000-word hard cap is in prose only. If the executor is an LLM agent, it will occasionally exceed it. Consider adding a note in the acceptance criteria to wc -w the file as part of T-01–T-08 acceptance.

  4. EXECUTION_BACKLOG.md Board verdict log is pre-populated with empty rows — this is fine as a template, but the verdict format in the table (Jobs _ · Musk _ · ...) differs slightly from the score-line format in the file footer (<!-- BOARD: Jobs N · ... -->). Keeping both formats consistent prevents ambiguity when the Queen reads the log vs. the file.


Summary

Area Status
vercel.json — security headers 🔴 Restore before merge
vercel.json — NODE_OPTIONS 🟡 Verify intent; restore if build memory matters
Docs file placement ✅ Correct
Canon safety rails ✅ Solid
Source file pre-flight ✅ All files exist
Governance logic ✅ Well-reasoned
Automation gaps 🟡 Minor (canon sanity script, word-count check)

The story-progression system itself is ready to execute against. The vercel.json regression is the only blocker.

…rd-count check

- T-00 preflight notes optional mcp__Higgsfield__generate_image availability (non-blocking).
- Episode acceptance verifies length with wc -w (<=3,000) so an LLM executor enforces the cap.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC

Copy link
Copy Markdown
Owner Author

Review response (commit 8a59295)

On the "🔴 Critical: vercel.json drops security headers" — please see my earlier reply #issuecomment-4763635233. This is a diff-misread; the headers were not dropped. The resolved file on this branch contains all of them — CORS (lines 22/26/30), X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Referrer-Policy, Strict-Transport-Security (79), Permissions-Policy (54), the /api/:path* + /health (92) rewrites, and the /home redirect (99). The - lines in the diff are the duplicate second copy that the conflict markers wrapped, not live config. One-command proof on the branch:

grep -nE "Strict-Transport-Security|/health|Access-Control-Allow-Origin" vercel.json

No restore needed. (NODE_OPTIONS rationale also covered in that same earlier reply — arcanea-web deploys READY without it.)

Applied from the minor suggestions:

  • (2) T-00 preflight now also notes optional mcp__Higgsfield__generate_image availability (non-blocking; native fallback).
  • (3) Episode acceptance now verifies length with wc -w (≤3,000) so an LLM executor actually enforces the cap.

Noted, not changing now:

  • (1) automating the canon sanity check as a script — good idea, but that's a tooling task beyond this docs PR; T-00 specifies the check and a script can land in a follow-up.
  • (4) verdict-log vs score-line format — the table is a human-readable log; the footer is the machine marker. They serve different readers; leaving as-is.

Thanks for confirming the source-file pre-flight and the governance design. Still a draft, staging-only.


Generated by Claude Code

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR Review — Arcanea Story Progression: Season One

Overall: a well-conceived plan document with one technical change that warrants close attention. Feedback below is organised by area.


vercel.json — the only code change (requires careful attention)

Merge conflict resolution — the conflict markers are correctly removed. Good.

buildCommand updated to turbo (pnpm turbo run build --filter=@arcanea/web)
This is a positive change: turbo adds build caching and is the right tool for a monorepo. Confirm the filter target @arcanea/web matches the name field in apps/web/package.json.

NODE_OPTIONS: \"--max-old-space-size=4096\" removed
This is the change I'd flag most urgently. If that option was there intentionally (which is likely — 4 GB heap flags don't appear by accident), removing it risks OOM failures on a complex Next.js 19 / React 19 build. The Vercel default heap is ~1.7 GB.

  • If the builds were genuinely healthy without it: document why it was removed (comment in PR description, or a note here).
  • If builds were hitting memory limits before: revert this line.

Vercel arcanea-2 still failing — the Vercel bot comment shows arcanea-2 reporting "Invalid vercel.json" even after this change. This looks like a separate project config issue (the arcanea-2 project may have its own vercel.json or root-directory setting that's misconfigured), but it should be investigated before merge so we're not shipping a broken deploy gate.


Documentation files (docs/story-progression/)

Strengths:

  • Correct placement under docs/ per repo conventions (CLAUDE.md: "Use /docs for documentation").
  • Status: STAGING on every file, and the explicit "nothing in CANON_LOCKED.md was touched" guarantee is exactly right.
  • T-00 pre-flight check (verify source lore files exist, confirm GEMINI_API_KEY, probe for mcp__Higgsfield__generate_image) catches missing dependencies before Phase 2 fails silently — good defensive design.
  • Concurrency safety in EXECUTION_BACKLOG.md ([IN PROGRESS — <executor>] marking before work begins) prevents double-execution when multiple CLI agents share the backlog.
  • Canon promotion gate is correctly placed: agents propose, Frank promotes, no self-promotion to CANON_LOCKED.md.
  • Episode map has explicit world-state deltas D1–D6; the "meaningful progression" test ("if this episode can be cut without changing what's true about the world, the Queen rejects it") is a strong quality invariant.

Issues / suggestions:

  1. Canon frequency verification at T-00 — T-00 says "confirm the Gate frequencies... in WORLD_PROGRESSION_EPOCH.md match CANON_LOCKED.md". However, WORLD_PROGRESSION_EPOCH.md doesn't actually list the frequencies explicitly — it relies on the source lore files. Make the check concrete: the canon sanity step should explicitly compare the 10 Gate frequencies (174 Hz → 1111 Hz) and Guardian names as they appear in CANON_LOCKED.md against any usage in the staged episodes. The check should output a diff, not just a pass/fail, so drift is visible.

  2. Missing reference file pre-flight — T-00 lists FLAGSHIP_TEAM_V2.md, STARLIGHT_CORPS_CODEX.md, VOID_ASCENDANTS.md, GATE_TOUCHED_UNDERGROUND.md, VISUAL_DOCTRINE.md for pre-flight. Consider adding STORY_ENGINE.md to that list since it's the direct source for Arc 1 and is cited in WORLD_PROGRESSION_EPOCH.md.

  3. README.md self-referencedocs/story-progression/README.md line 134 says "Plus this README itself, which serves as Mission Control. (5 files total in this PR; the table below lists the 4 it links to.)" — after merge this becomes stale when additional files are added to the directory. Consider phrasing it without a hardcoded file count.

  4. generate-arcanea-img.mjs path — VISUAL_PLAN.md references this script "at root" (node generate-arcanea-img.mjs). CLAUDE.md instructs to never save working files to the root folder. If this script doesn't exist yet it needs to live under /scripts/, not root. If it already exists at root: note it's a pre-existing file. T-00's pre-flight check handles this, but the path in the pipeline examples would need updating.

  5. Episode count inconsistencyREADME.md line 136 says "the table below lists the 4 it links to" (4 files), but the PR description says "The four documents" and separately lists 5 files (including the README). The README table correctly lists 4 supporting docs. Minor clarity issue, not a blocker.

  6. Score-line format in STARLIGHT_GOVERNANCE.md — the worked example uses <!-- BOARD: Jobs 5 · Musk 4 · Buddha 5 · RockStar 4 · KPop 5 · VERDICT: SHIP -->. The RockStar lens label in the Board section is written as "🎸 Rock Star" (two words, with emoji). The score-line uses RockStar (one word). Standardise the key so automated parsing of score lines is unambiguous.


Security

No secrets hardcoded. GEMINI_API_KEY is referenced as an env variable, not a value. CORS origin locked to https://arcanea.ai — correct. No concerns here.


Test coverage

No automated tests for documentation content (expected for planning docs). The Board-of-Five self-scoring requirement serves as the manual gate. The one thing worth considering: a lightweight CI check that runs the T-00 canon sanity step (a shell script that greps for Guardian names/frequencies in the staged files and diffs against CANON_LOCKED.md) would catch drift automatically on every future episode commit rather than requiring a manual step.


Summary

Area Status
Documentation structure and placement
Canon protection (staging + promotion gate)
Concurrency / double-execution safety
buildCommand turbo migration
NODE_OPTIONS removal ⚠️ Needs confirmation
arcanea-2 Vercel deploy failure ⚠️ Investigate before merge
Score-line key standardisation 🔧 Minor cleanup
Self-referential README file count 🔧 Minor cleanup
T-00 canon check concreteness 🔧 Suggestion

The plan documents themselves are franchise-quality work. The one thing I'd ask be resolved before merging is confirmation that removing the heap size option is intentional and won't cause build OOM failures.

…ndardization

- T-00 canon check made concrete (compare 10 Gate frequencies + Guardian/Godbeast
  names against CANON_LOCKED.md, emit a diff); add STORY_ENGINE.md to preflight list.
- Governance: declare canonical score-line tokens (Jobs/Musk/Buddha/RockStar/KPop)
  vs the human emoji display names, so score lines parse unambiguously.
- README: de-hardcode the file count (won't go stale as the directory grows).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC

Copy link
Copy Markdown
Owner Author

Review response (commit ee37743) — final polish pass

Thanks — this read was accurate on the vercel.json resolution. Applied the valid doc refinements:

  • (1) T-00 canon check made concrete: compare the 10 Gate frequencies (174→1111 Hz) + Guardian/Godbeast names against CANON_LOCKED.md and emit a diff, not just pass/fail.
  • (2) Added STORY_ENGINE.md to the T-00 pre-flight file list (it's the direct Arc 1 source).
  • (3 & 5) README no longer hardcodes a file count — won't go stale as the directory grows.
  • (6) Standardized the score-line keys: declared Jobs · Musk · Buddha · RockStar · KPop as the canonical machine tokens, distinct from the human emoji display names — so score lines parse unambiguously.

Already-answered / no change:

  • NODE_OPTIONS: empirically fine — arcanea-web deploys READY without it (see #issuecomment-4763635233).
  • arcanea-2 failure: correct that it's a separate project (root dir apps/academy) — pre-existing and unrelated to this docs PR; out of scope here.
  • (4) generate-arcanea-img.mjs at root: it's a pre-existing repo file, not added by this PR, so I'm not relocating it here (would be out-of-scope and could break existing callers). The CI shell-check suggestion is a good follow-up idea for a tooling PR.

This is my final polish pass on the plan — the document set is complete. Still a draft, staging-only; awaiting Creator review and the canon-promotion decision. I'll hold further commits unless a genuinely new issue surfaces.


Generated by Claude Code

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR Review — Arcanea Story Progression Season One

Overall: this is a well-structured plan with good governance design. The vercel.json fix is the only code change and needs one clarifying look; the five new docs are solid. A few things worth addressing before merge.


vercel.json — the substantive change

NODE_OPTIONS: --max-old-space-size=4096 was silently dropped.

The conflict resolution correctly chose pnpm turbo run build --filter=@arcanea/web over cd apps/web && pnpm run build, but it removed the heap-size flag that was present only in the HEAD side of the conflict. Large Next.js/Turbo monorepo builds can OOM without it. Before this merges, confirm whether Vercel preview deploys were previously hitting OOM errors (which would make the flag load-bearing) or whether the turbo build already manages memory differently. If in doubt, add it back — it's a no-op if memory is fine and a hard save if it's not.

Everything else in vercel.json — security headers (X-Frame-Options, HSTS, CSP, CORS origin lock to arcanea.ai), rewrites, redirects — is correctly preserved. Good conflict resolution overall.


Documentation files

Strengths:

  • All five files land in docs/story-progression/ — correct per CLAUDE.md file-org rules (no root saves).
  • CANON_LOCKED.md is treated as immutable and read-only throughout. Every reference is explicit about this.
  • The staging-only / Creator-promotes pattern is exactly right for AI-generated content entering a canonical universe.
  • T-00 pre-flight catches missing lore files before expensive writing begins — this will save a lot of wasted work.
  • Score-line machine tokens (Jobs, Musk, Buddha, RockStar, KPop) alongside human display names is a clean separation of concerns for tooling.
  • The [IN PROGRESS — <executor>] concurrency convention is a pragmatic solution for multi-agent backlog execution.

Issues:

1. Vaerith / Vaelith distinction is undocumented in the continuity guardrails.
The commit message explains the distinction (Vaerith = Taura's storm-drake; Vaelith = Elara's Godbeast). That context is in git history, not in the docs an executor will read. The continuity guardrails in WORLD_PROGRESSION_EPOCH.md list exact names but don't call out this pair explicitly. An executor could conflate them. Recommend adding one line to the guardrails:

- **Vaerith ≠ Vaelith.** Vaerith is Taura Skein's bonded storm-drake (FLAGSHIP_TEAM_V2).
  Vaelith is the Godbeast of Elara (Shift Gate). Never conflate.

2. Concurrent executor pattern has a git-level gap.
The [IN PROGRESS — <executor>] convention is a good signal but two CLI agents can both read an unchecked task before either marks it in-progress, then both execute and commit. The backlog as a git-tracked file has no atomic check-and-mark. This is acceptable for a draft plan, but worth noting: if multiple executors are running in parallel against the same branch, the last writer wins and one agent's work may overwrite the other's status check. Consider whether a shared lock file or a separate execution-log file would be more robust for the real execution phase.

3. Self-scoring in the operating loop.
The governance asks the Operator to self-score against the Board before the Queen reviews. Self-scoring is inherently optimistic (the entity that wrote the artifact scores it). The Queen is the mitigation, but she only sees artifacts that already passed self-scoring. Consider whether the Queen loop should spot-check a random artifact per gate regardless of self-score, as a calibration step.


Canon consistency check

Spot-checked against .claude/CLAUDE.md:

  • Gate frequencies cited in WORLD_PROGRESSION_EPOCH.md say the T-00 task will verify them against CANON_LOCKED.md (174 Hz → 1111 Hz). ✓
  • Nero is not treated as evil anywhere in the docs. ✓
  • Five elements (Fire, Water, Earth, Wind, Void/Spirit) not referenced directly but not contradicted. ✓
  • Malachar / Shadowfen not referenced — Arc 1 is correctly self-contained. ✓
  • Seravyn Duskmere cited to STARBOUND_CREWS.md. ✓

Security

No secrets, credentials, or .env content. The GEMINI_API_KEY reference in VISUAL_PLAN.md is a usage instruction, not a value. ✓


Test coverage

Documentation-only PR; no executable tests applicable. The acceptance criteria on T-01–T-16 are concrete and testable by an executor. The wc -w word-count check in episode acceptance is a good mechanical gate.


Summary

Area Status
vercel.json conflict resolution ✅ Correct — verify NODE_OPTIONS removal is intentional
File placement (CLAUDE.md compliance)
Canon safety (CANON_LOCKED.md protection)
Governance structure
Vaerith/Vaelith callout in guardrails ⚠️ Missing — easy one-liner fix
Concurrent executor git safety ⚠️ Known gap — acceptable for draft, document the risk
NODE_OPTIONS drop ⚠️ Needs intentionality check before merge

Suggest: confirm the NODE_OPTIONS intent and add the Vaerith/Vaelith guardrail line, then this is ready to move out of draft.

- Add explicit Vaerith != Vaelith continuity guardrail (Taura's storm-drake vs
  Elara's Godbeast) so an executor reading the docs can't conflate them — the
  distinction was only in git history before.
- Document the concurrency convention's git-level gap (soft signal, not atomic
  lock) and the lock/execution-log mitigation for true parallel runs.
- Queen calibration: re-score >=1 artifact per gate from scratch ignoring the
  self-score, expanding to full re-review on >=1-lens divergence.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Znc7W5RxzewdWQcJQSodC

Copy link
Copy Markdown
Owner Author

Review response (commit 2e0f721)

Accurate, useful review — thank you. All three substantive items applied:

  • (1) Vaerith ≠ Vaelith guardrail — added explicitly to the continuity guardrails so an executor reading the docs (not git history) can't conflate Taura's storm-drake with Elara's Godbeast. Good catch; this is the exact confusion two earlier review passes hit.
  • (2) Concurrency git gap — documented the convention as a soft signal, not an atomic lock (two agents can read the same [ ] before marking; git is last-writer-wins), with the lock/execution-log (or branch-per-executor) mitigation for true parallel runs.
  • (3) Self-scoring optimism — added a Queen calibration rule: she re-scores ≥1 artifact per gate from scratch, ignoring the self-score, and expands to a full re-review if her independent score diverges by ≥1 on any lens. Aligns with the "treat your own confidence as suspect" discipline.

NODE_OPTIONS — no change; confirmed intentional and empirically fine (arcanea-web deploys READY without it; detail in #issuecomment-4763635233). And thanks for independently confirming the headers/rewrites/redirects are all correctly preserved.

The document set is complete and hardened. Draft, staging-only, awaiting Creator review + the canon-promotion decision. Holding further commits unless a genuinely new issue surfaces.


Generated by Claude Code

@claude

claude Bot commented Jun 21, 2026

Copy link
Copy Markdown

PR Review — Arcanea Story Progression: Season One Build Plan

Summary: This PR ships two distinct changes — a critical vercel.json hotfix and a new docs/story-progression/ planning framework for CLI-executable story generation. Both deserve independent looks.


vercel.json fix ✅

The committed conflict markers were silently invalid JSON and blocking every Vercel preview deploy repo-wide. Resolving to the turbo monorepo build command (pnpm turbo run build --filter=@arcanea/web) is correct. The resulting config looks clean:

  • CORS is domain-locked to https://arcanea.ai on API routes — appropriate.
  • Security headers (HSTS, X-Frame-Options: DENY on API, X-Frame-Options: SAMEORIGIN globally, X-Content-Type-Options, XSS-Protection, Referrer-Policy) are well-configured.
  • No secrets or credentials present.

One minor note: /api/:path* rewrites to /api/:path* (no-op rewrite). This is harmless but could be removed to reduce config noise.


docs/story-progression/ framework

Code quality / best practices

  • All files land in docs/ per project conventions — no root-level markdown was added. ✓
  • Every file carries Status: STAGING and explicitly names its canonical source references. ✓
  • The Vaerith ≠ Vaelith continuity guardrail (T-00 canon check + inline callout in VISUAL_PLAN) is exactly right — executor-readable disambiguation that only existed in git history before this PR. ✓
  • Score-line tokens (Jobs, Musk, Buddha, RockStar, KPop) are properly separated from the emoji display names so tooling can parse them unambiguously. ✓
  • De-hardcoding the branch name in README prevents stale references after merge. ✓

Potential issues

  1. Soft concurrency lock (acknowledged). The [IN PROGRESS — <executor>] convention is documented as a soft signal, and the caveats (last-writer-wins, two agents reading [ ] before either marks it) plus the mitigation path (lock file or one-branch-per-executor) are called out explicitly. This is the honest approach; just ensure any executor spawned against this backlog is configured to use the lock file mitigation for true parallel runs, or serialized by default.

  2. Pre-flight source files not in this PR. T-00 pre-flights STORY_ENGINE.md, FLAGSHIP_TEAM_V2.md, STARLIGHT_CORPS_CODEX.md, VOID_ASCENDANTS.md, GATE_TOUCHED_UNDERGROUND.md, and VISUAL_DOCTRINE.md. None of these are added here. The pre-flight gracefully lists missing items for the operator rather than hard-failing, which is the right design — but it means a headless executor running T-00 on a clean checkout will immediately surface gaps. Consider linking the open issues / PRs that are expected to land these source files before Phase 1 begins, so the backlog is self-contained as a planning document.

  3. generate-arcanea-img.mjs existence. T-00 pre-flights this script and GEMINI_API_KEY. T-10/T-11 depend on them. If this script doesn't currently exist at repo root, the visual phase will stall at setup. Worth confirming (or noting as a prerequisite) before the backlog goes live.

  4. Self-scoring bias is correctly identified. The Queen calibration rule (re-score ≥1 artifact per gate from scratch, expanding to full re-review on ≥1-lens divergence) directly addresses the known LLM tendency toward optimistic self-scoring (Karpathy hygiene). This is one of the stronger design decisions in the governance doc.

Performance

Documentation-only changes carry no runtime cost. The vercel.json fix actively improves CI throughput by unblocking preview deploys.

Security

No credentials or secrets. The plan explicitly calls out GEMINI_API_KEY as a required environment variable (pre-flight check) rather than hardcoding it — correct.

Test coverage

No automated tests expected for planning docs or config files. The vercel.json fix will be validated by the next Vercel preview deploy. The T-00 canon sanity check (diff output against CANON_LOCKED.md) acts as the integration test for the doc content itself, which is appropriate.


Verdict

The vercel.json fix is a clear unblock — that alone justifies merging. The governance framework is well-structured, canon-safe by design, and executor-ready. The main prerequisite to making the backlog executable is confirming the source lore files and generate-arcanea-img.mjs are present (or documenting their arrival path). Everything is staged, reversible, and correctly withholds canon promotion authority from the agent.

Suggested before merge:

  • Confirm or note which PR/branch is landing the pre-flight source files (STORY_ENGINE.md, FLAGSHIP_TEAM_V2.md, etc.) so T-00 doesn't surface surprises.
  • Optionally remove the no-op /api/:path* rewrite from vercel.json.

Otherwise this is ready to ship.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants